using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Services;


namespace MainGame.GamePlay
{
  public class UIRenderer : Microsoft.Xna.Framework.DrawableGameComponent
  {
    float t = 0.0f;
    public UIRenderer(Game game)
      : base(game)
    {
      UpdateOrder = (int)ComponentOrders.UI;
      DrawOrder = (int)ComponentOrders.UI;
    }

#warning Problema di performance
    /* non si crea uno sprite batch per ogni component che lo usa;
     * piuttosto si crea uno sprite batch unico condiviso tra tutti
     * tramite un servizio
     */
    SpriteBatch sprite_batch;
    protected override void LoadContent()
    {
      sprite_batch = new SpriteBatch(GraphicsDevice);
      base.LoadContent();
    }

    public override void Update(GameTime gameTime)
    {
      t += gameTime.dt();

      base.Update(gameTime);
    }

    public override void Draw(GameTime gameTime)
    {
      sprite_batch.Begin();
#warning Cattive pratiche
      /*
       * In questa riga di codice ci sono alcuni problemi:
       * 1. invochiamo content.load ad ogni frame: dovremmo 
       *    caricare il font una volta sola nella LoadContent
       * 2. posizioniamo il testo in modo fissato e non relativo
       *    alla dimensione dello schermo e della stringa
       */
      sprite_batch.DrawString(Game.Content.Load<SpriteFont>("large_font"), t.ToString(), new Vector2(50, 50), Color.Yellow);
      sprite_batch.End();
      
      base.Draw(gameTime);
    }
  }
}
